package com.big.codegen.config;

import freemarker.template.Configuration;
import freemarker.template.TemplateExceptionHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ResourceLoader;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * Freemarker配置类
 *
 * @author 山归岿
 * @create 2025-01-03
 */
@org.springframework.context.annotation.Configuration
public class FreemarkerConfig {

    @Autowired
    private ResourceLoader resourceLoader;

    @Bean("codegenFreemarkerConfiguration")
    public Configuration freemarkerConfiguration() throws IOException {
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);
        
        // 设置模板加载路径 - 使用ClassLoader方式，兼容JAR包部署
        configuration.setClassForTemplateLoading(this.getClass(), "/templates");
        
        // 设置字符编码
        configuration.setDefaultEncoding(StandardCharsets.UTF_8.name());
        
        // 设置模板异常处理器
        configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        
        // 不要在生产环境中启用日志模板异常
        configuration.setLogTemplateExceptions(false);
        
        // 设置包装不兼容的改进
        configuration.setWrapUncheckedExceptions(true);
        
        // 设置回退到解释器
        configuration.setFallbackOnNullLoopVariable(false);
        
        return configuration;
    }
}